#include <stdio.h>
#include <signal.h>
#include <unistd.h>
#include <string.h>

void handler(int signo)
{
  printf("get a signo: %d\n",signo);
}


int main()
{
  struct sigaction act;
  memset(&act,0,sizeof(act));

  act.sa_handler=handler;

  sigaction(2,&act,NULL);

  while(1)
  {
    printf("hello world\n");
    sleep(1);
  }

  return 0;
}




//void show_pending(sigset_t *set)
//{
//  printf("curr process pending: ");
//  for(int i=1;i<=31;i++)
//  {
//    if(sigismember(set,i))
//    {
//      printf("1");
//    }
//    else
//    {
//      printf("0");
//    }
//
//  }
//  printf("\n");
//}
//
//
//int main()
//{
//  sigset_t iset,oset;
//
//  sigemptyset(&iset);
//  sigemptyset(&oset);
//
//  sigaddset(&iset,2);
//
//  sigprocmask(SIG_SETMASK,&iset,&oset);//此函数会对block表做修改
//
//  sigset_t pending;
//
//  int count=0;
//
//  while(1)
//  {
//    sigemptyset(&pending);
//
//    sigpending(&pending);
//    show_pending(&pending);
//
//    printf("hello world\n");//sigprocmask将2号信号屏蔽了，此时按Ctrl c 不会终止程序了，此程序无法屏蔽9号信号---kill
//    sleep(1);
//
//    count++;
//    if(count==20)
//    {
//      sigprocmask(SIG_SETMASK,&oset,NULL);
//      printf("恢复对2号信号，可以被递达\n");
//    }
//  }
//
//  return 0;
//}
